用途:访问对象、集合、序列的快捷方式,可以使用下标脚本的索引设置和获取值,不需要再调用对应的存取方法
支持:类、结构体、枚举
特点:
- 同一个目类型可以定义多个附属脚本
- 可以通过索引值的类型进行重载
- 语法类似实例方法和计算属性的混合
12.1 语法
关键字:
subscript
、set
、get
说明:语法类似于实例方法
语法和计算型属性
语法的混合。
- 显式声明入参和返回值(类似实例方法)
- 可以设定为读写或只读,由
getter
和setter
实现(类似计算属性)setter和getter:
** | 参数 | 返回值 |
---|---|---|
set | 0或多个参数类型必须与get 返回类型相同,如果不指定参数,会提供一个名为newValue 的默认参数 |
无 |
get | 无 | 和脚本入参类型相同值 |
1 | //具备读写能力的附属脚本 |
案例:展示传入整数的n倍数(结构体中使用只读下标脚本)
1 | struct TimesTable { |
12.2 用法(以字典为例)
说明:字典本身是由结构体实现的,通过下标脚本来对其实例来进行存取操作。
特点:
- 字典实例在下标脚本中使用和字典索引相同类型的值
- 字典通过附属脚本返回的实际是一个可选值
- 从字典实例中删除某个索引下的值也需要给这个索引赋值为
nil
1 | var numberOfLogs = ["spider":8, "ant":6, "cat":4] |
12.3 高级
说明:下面详细说明下标脚本的一些特点
- 参数:下标脚本可以接受任意数量的入参,并且这些入参可以是任意类型
- 返回值:下标脚本的返回值也可以是任意类型
- 变量:下标脚本可以使用变量参数和可变参数
- 重载:一个类或结构体可以根据自身需要提供多个下标脚本实现,使用下标脚本时将通过入参的数量和类型进行区分,自动匹配合适的下标脚本,这就是下标脚本的重载
限制:
- 参数:不能使用输入输出参数,也不能给参数设置默认值
1 | //矩阵 |